package com.codemeta.bokit.comm.kit;

import cn.hutool.core.util.NumberUtil;
import java.math.BigDecimal;

/**
 * 数字工具类
 *
 * @author 美萌hecc
 * @apiNote 继承并扩展hutool.NumberUtil类
 * @date 2020/6/23
 */
public class NumKit extends NumberUtil {

    public final static int ZERO = 0;

    /**
     * 是否 > 0
     *
     * @param val .
     * @param <T> 继承Number的泛型类
     * @return .
     */
    public static <T extends Number> boolean gt0(T val) {
        return val != null && parseLong(val.toString()) > ZERO;
    }

    /**
     * 是否 = 0，null = 0
     *
     * @param val .
     * @param <T> .
     * @return .
     */
    public static <T extends Number> boolean eq0(T val) {
        return val == null || parseLong(val.toString()) == ZERO;
    }

    /**
     * 是否 < 0
     *
     * @param val .
     * @param <T> .
     * @return .
     */
    public static <T extends Number> boolean lt0(T val) {
        return val != null && parseLong(val.toString()) < ZERO;
    }

    /**
     * 是否 <= 0，null = 0
     *
     * @param val .
     * @param <T> .
     * @return .
     */
    public static <T extends Number> boolean le0(T val) {
        return eq0(val) || lt0(val);
    }

    /**
     * 计算同比
     *
     * @param v1 .
     * @param v2 .
     * @return .
     * @apiNote 公式：（今年 - 去年）/ 去年
     */
    public static BigDecimal yoy(Number v1, Number v2) {
        return div(sub(v1, v2), v2);
    }

    /**
     * 计算环比
     *
     * @param v1 .
     * @param v2 .
     * @return .
     * @apiNote 公式：（本期 - 上期）/ 上期；单位：日/月/季/年
     */
    public static BigDecimal mom(Number v1, Number v2) {
        return div(sub(v1, v2), v2);
    }
}